<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: semmer-gs
  Date: 2021/12/10
  Time: 11:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>添加员工信息</title>
</head>
<body>


    <form action="testConversionServiceConverter" method="post">
        <!-- lastname-email-gender-department.id例如:GG-gg@atguigu.com-0-105 -->
        Employee: <input type="text" name="employee"/>
        <input type="submit" value="Submit">
    </form>
    <br /><br />

    <!--
        1. 为什么使用form标签呢?
        可以更快速的开发出表单页面,而且可以更方便的进行表单值的回显
        2.注意:
        可以通过 mode1Attribute 属性指定绑定的模型属性，
        若没有指定该属性，则默认从 request 域对象中读取 command 的表单 bean
        如果该属性值也不存在,则会发生错误。
     -->
    <%
        request.setAttribute("basePath", request.getContextPath());
    %>
    <form:form action="${requestScope.basePath}/employee" method="post" modelAttribute="employee">

        <form:errors path="*"></form:errors>

        <c:if test="${employee.id == null}">
            <!-- path 属性对应 html 表单的那么属性值 -->
            LastName <form:input path="lastName"/> <form:errors path="lastName"></form:errors> <br/>
        </c:if>

        <c:if test="${employee.id != null}">
            <form:hidden path="id"/>
            <%--
                对于 _method 不能使用 form:hidden 标签，因为 modelAttribute 对应的 bean 中没有 _method 这个属性
                如果提供页面匹配 VO ，自定义上，是可以的。
                <form:hidden path="_method" value="PUT" />
            --%>
            <input type="hidden" name="_method" value="PUT">
        </c:if>


        Email <form:input path="email"/> <br/>
        <%
            Map<String, String> genders = new HashMap<>();
            genders.put("1", "Male");
            genders.put("0", "Female");
            request.setAttribute("genders", genders);
        %>
        Gender <br /> <form:radiobuttons path="gender" items="${genders}" delimiter="<br />"/> <br/>
        Department <form:select path="department.id" items="${departments}" itemLabel="name" itemValue="id"/> <br/>
        <!--
            1。数据类型转换
            2。数据类型格式化
            3。数据校验.
            1)。如何校验?注解?
                ①. 使用 JSR 303 验证标准
                ②. 加入 hibernate validator 验证框架
                ③. 在 SpringMVC 配置文件中添加<mvc : annotation-driven />
                ④. 需要在 bean 的属性上添加对应的注解
                ⑤. 在目标方法 bean 类型的前面添加 @Valid 注解
            2)。验证出错转向到哪一个页面?
            3)。错误消息?如何显示，如何把错误消息进行国际化

        1.Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例，以创建 DataBinder 实例对象
            2.DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中
            3.调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验，并最终生成数据绑定结果 BindingData 对象
            4.Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象，将它们赋给处理方法的响应入参
        -->
        Birth: <form:input path="birth" /> <br/>
        Salary: <form:input path="salary" /> <br/>
        <input type="submit" value="Submit">
    </form:form>


</body>
</html>
